package com.smzd.ccms.complets;

import java.net.URLDecoder;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import com.smzd.ccms.business.ArticleService;
import com.smzd.ccms.core.BaseCompletPlugin;
import com.smzd.ccms.core.ParamsWrapper;
import com.smzd.ccms.domain.Article;
import com.smzd.framework.utils.db.RPage;

/**
 * 获取指定栏目的文章列表组件。<br>
 * <br>
 * 该组件可以指定具体的栏目Id，这样将获取该栏目的文章列表。<br>
 * 也可以不指定具体的栏目，此时栏目Id将从URL路径中获取，调用当前栏目下的文章列表。 <br>
 * <br>
 * 该组件支持分页查询，分页参数通过URL的参数或者组件的配置参数均可设置，并且优先使用URL中传递过来的参数。 <br>
 * <br>
 * 关于参数配置：
 * <ul>
 * <li>页码参数：p<br>
 * 参数来源：URL参数，整数类型。无的话认为该值为1，即第一页。
 * <li>分页大小：n<br>
 * 参数来源：URL参数（优先），组件配置参数。整数类型。都没有配置的话此值为10。
 * <li>排序字段：order<br>
 * 参数来源：组件配置参数。字符串类型。没有配置的话此值为“id”。
 * <li>排序方法：by<br>
 * 参数来源：组件配置参数。字符串类型。没有配置的话此值为“desc”。
 * </ul>
 * 
 * @author YuZhongda
 * 
 */
public class ArticleListComplet extends BaseCompletPlugin {
	ArticleService articleService;

	public ArticleListComplet(int id) {
		super(id);
		articleService = ArticleService.getInstance();
	}

	@Override
	public String execute(ParamsWrapper params) throws Exception {
		if (articleService == null) {
			synchronized (this) {
				if (articleService == null) {
					articleService = ArticleService.getInstance();
				}
			}
		}
		Integer chId = params.getParamValue("chId", 0);
		Integer pageNo = params.getParamValue("p", 1);
		Integer pageSize = params.getParamValue("n", 10);
		String order = params.getParamValue("order", "id");
		String by = params.getParamValue("by", "desc");
		// 2016-08-18增加根据发布状态来获取文章列表
		String status = params.getParamValue("status", "");
		RPage<Article> page = new RPage<Article>();
		page.setPageNo(pageNo);
		page.setPageSize(pageSize);
		page.setSortName(order);
		page.setSortOrder(by);
		// 2016-08-18增加根据发布状态来获取文章列表
		page.setQueryType(status);
		if (chId == 0) {
			// 这时候要从路径中取
			// 这时候要从路径中取
			page.putParam("chPath", params.getModelParamValue("_channel_"));
			page.putParam("sitePath", params.getModelParamValue("_site_"));
			articleService.getArticlesByChPath(page);
		} else {
			page.putParam("chId", chId);
			articleService.getArticlesByChId(page);
		}
		List<Article> arts = page.getElems();
		if (arts != null && arts.size() > 0) {
			for (Article art : arts) {
				if (!StringUtils.isEmpty(art.getContent())) {
					art.setContent(URLDecoder.decode(art.getContent(), "utf-8"));
				}
			}
		}
		params.put("page", page);
		return params.getParamValue("view", "ch-art-list.ftl");
	}

}
